--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vendor/lxmfy/tests/test_lxmf_commands.py dev (8f381c86) Text, 9.08 KB
T8b949e"""Tests for LXMF FIELD_COMMANDS and FIELD_RESULTS support."""
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3Mock
Tff7b72import T7ee787pytest
Tff7b72from T7ee787lxmfy Tff7b72import Te6edf3BotConfigTb4b4b4, Te6edf3LXMFBot
Tff7b72from T7ee787lxmfyT7ee787.T7ee787lxmf_fields Tff7b72import Tb4b4b4(
Te6edf3FIELD_COMMANDSTb4b4b4,
Te6edf3FIELD_RESULTSTb4b4b4,
Te6edf3pack_resultTb4b4b4,
Te6edf3unpack_commandsTb4b4b4,
Tb4b4b4)
Tff7b72class T56d364TestUnpackCommandsTb4b4b4:
T8b949e"""Test unpack_commands helper."""
Tff7b72def Td2a8fftest_empty_fieldsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3unpack_commandsTb4b4b4(Tff7b72NoneTb4b4b4) Tff7b72== Tb4b4b4[Tb4b4b4]
Tff7b72assert Te6edf3unpack_commandsTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4) Tff7b72== Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8fftest_single_dictTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4}
Tff7b72assert Te6edf3unpack_commandsTb4b4b4(Te6edf3fieldsTb4b4b4) Tff7b72== Tb4b4b4[Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4]
Tff7b72def Td2a8fftest_list_of_dictsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4[Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4}Tb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpongTa5d6ff"Tb4b4b4}Tb4b4b4]Tb4b4b4}
Te6edf3result Tff7b72= Te6edf3unpack_commandsTb4b4b4(Te6edf3fieldsTb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72== T79c0ff2
Tff7b72assert Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffpingTa5d6ff"
Tff7b72assert Te6edf3resultTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffpongTa5d6ff"
Tff7b72def Td2a8fftest_ignores_non_dict_entriesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4[Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ffbad_entryTa5d6ff"Tb4b4b4, T79c0ff123Tb4b4b4]Tb4b4b4}
Te6edf3result Tff7b72= Te6edf3unpack_commandsTb4b4b4(Te6edf3fieldsTb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72== T79c0ff1
Tff7b72def Td2a8fftest_no_command_keyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffcmdTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4}
Tff7b72assert Te6edf3unpack_commandsTb4b4b4(Te6edf3fieldsTb4b4b4) Tff7b72== Tb4b4b4[Tb4b4b4{Ta5d6ff"Ta5d6ffcmdTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4]
Tff7b72class T56d364TestPackResultTb4b4b4:
T8b949e"""Test pack_result helper."""
Tff7b72def Td2a8fftest_basic_resultTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3pack_resultTb4b4b4(Ta5d6ff"Ta5d6ffpongTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffresultTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffpongTa5d6ff"
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffokTa5d6ff"
Tff7b72assert Ta5d6ff"Ta5d6ffrequest_idTa5d6ff" Tff7b72not Tff7b72in Te6edf3result
Tff7b72def Td2a8fftest_result_with_request_idTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3pack_resultTb4b4b4(Ta5d6ff"Ta5d6ffpongTa5d6ff"Tb4b4b4, Te6edf3request_idTff7b72=Ta5d6ff"Ta5d6ffabc123Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffresultTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffpongTa5d6ff"
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffabc123Ta5d6ff"
Tff7b72def Td2a8fftest_error_statusTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3pack_resultTb4b4b4(Ta5d6ff"Ta5d6ffbadTa5d6ff"Tb4b4b4, Te6edf3statusTff7b72=Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6fferrorTa5d6ff"
Tff7b72class T56d364TestLXMFBotFieldCommandsTb4b4b4:
T8b949e"""Test LXMFBot handling of FIELD_COMMANDS."""
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3scopeTff7b72=Ta5d6ff"Ta5d6fffunctionTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffbotTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3config Tff7b72= Te6edf3BotConfigTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffTestBotTa5d6ff"Tb4b4b4,
Te6edf3test_modeTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3first_message_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3lxmf_commands_enabledTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3command_prefixTff7b72=Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3bot Tff7b72= Te6edf3LXMFBotTb4b4b4(Tff7b72*Tff7b72*Te6edf3configTff7b72.Td2a8ff__dict__Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffconfig_path Tff7b72= Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)
Tff7b72yield Te6edf3bot
Tff7b72tryTb4b4b4:
Te6edf3botTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8fftest_field_command_executes_registered_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3botTb4b4b4)Tb4b4b4:
T8b949e"""A message with FIELD_COMMANDS should trigger the matching command."""
Te6edf3responses Tff7b72= Tb4b4b4[Tb4b4b4]
Tf0883e@botTff7b72.Td2a8ffcommandTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffping_cmdTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3responsesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3ctxTff7b72.Td2a8ffcontentTb4b4b4)
Te6edf3ctxTff7b72.Td2a8ffreplyTb4b4b4(Ta5d6ff"Ta5d6ffpongTa5d6ff"Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmsg_hash_1Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4}
Te6edf3sent Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffmock_sendTb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3titleTff7b72=Tff7b72NoneTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3sentTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflxmf_fieldsTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3original_send Tff7b72= Te6edf3botTff7b72.Td2a8ffsend
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3mock_send
Te6edf3botTff7b72.Td2a8ff_process_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3responsesTb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3sentTb4b4b4) Tff7b72== T79c0ff1
Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3lxmf_fields Tff7b72= Te6edf3sentTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Te6edf3msg Tff7b72== Ta5d6ff"Ta5d6ffpongTa5d6ff"
Tff7b72assert Te6edf3lxmf_fields Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3FIELD_RESULTS Tff7b72in Te6edf3lxmf_fields
Tff7b72def Td2a8fftest_field_command_with_request_idTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3botTb4b4b4)Tb4b4b4:
T8b949e"""Replies to field commands should include FIELD_RESULTS with request_id."""
Tf0883e@botTff7b72.Td2a8ffcommandTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffechoTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffecho_cmdTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3ctxTff7b72.Td2a8ffreplyTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3ctxTff7b72.Td2a8ffargsTb4b4b4)Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmsg_hash_2Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{
Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffechoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffhelloTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffworldTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffreq-42Ta5d6ff"Tb4b4b4,
Tb4b4b4}
Tb4b4b4}
Te6edf3sent Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffmock_sendTb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3titleTff7b72=Tff7b72NoneTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3sentTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflxmf_fieldsTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3original_send Tff7b72= Te6edf3botTff7b72.Td2a8ffsend
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3mock_send
Te6edf3botTff7b72.Td2a8ff_process_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3sentTb4b4b4) Tff7b72== T79c0ff1
Te6edf3_destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3lxmf_fields Tff7b72= Te6edf3sentTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Te6edf3msg Tff7b72== Ta5d6ff"Ta5d6ffhello worldTa5d6ff"
Tff7b72assert Te6edf3FIELD_RESULTS Tff7b72in Te6edf3lxmf_fields
Tff7b72assert Te6edf3lxmf_fieldsTb4b4b4[Te6edf3FIELD_RESULTSTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffreq-42Ta5d6ff"
Tff7b72assert Te6edf3lxmf_fieldsTb4b4b4[Te6edf3FIELD_RESULTSTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffokTa5d6ff"
Tff7b72def Td2a8fftest_field_command_unknown_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3botTb4b4b4)Tb4b4b4:
T8b949e"""Unknown field commands should get an error reply with FIELD_RESULTS."""
Te6edf3mock_message Tff7b72= Te6edf3MockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmsg_hash_3Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4}
Te6edf3sent Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffmock_sendTb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3titleTff7b72=Tff7b72NoneTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3sentTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflxmf_fieldsTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3original_send Tff7b72= Te6edf3botTff7b72.Td2a8ffsend
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3mock_send
Te6edf3botTff7b72.Td2a8ff_process_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3sentTb4b4b4) Tff7b72== T79c0ff1
Te6edf3_destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3lxmf_fields Tff7b72= Te6edf3sentTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Ta5d6ff"Ta5d6ffUnknown commandTa5d6ff" Tff7b72in Te6edf3msg
Tff7b72assert Te6edf3FIELD_RESULTS Tff7b72in Te6edf3lxmf_fields
Tff7b72assert Te6edf3lxmf_fieldsTb4b4b4[Te6edf3FIELD_RESULTSTb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6fferrorTa5d6ff"
Tff7b72def Td2a8fftest_field_command_disabledTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3botTb4b4b4)Tb4b4b4:
T8b949e"""When lxmf_commands_enabled is False, field commands should be ignored."""
Te6edf3botTff7b72.Td2a8ffconfigTff7b72.Td2a8fflxmf_commands_enabled Tff7b72= Tff7b72False
Te6edf3text_responses Tff7b72= Tb4b4b4[Tb4b4b4]
Tf0883e@botTff7b72.Td2a8ffcommandTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6fftextonlyTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftext_cmdTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3text_responsesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3ctxTff7b72.Td2a8ffcontentTb4b4b4)
T8b949e# Also set up a normal text message handler path
Te6edf3mock_message Tff7b72= Te6edf3MockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff/textonly helloTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmsg_hash_4Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fftextonlyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4}
Te6edf3sent Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffmock_sendTb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3titleTff7b72=Tff7b72NoneTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3sentTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflxmf_fieldsTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3original_send Tff7b72= Te6edf3botTff7b72.Td2a8ffsend
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3mock_send
Te6edf3botTff7b72.Td2a8ff_process_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
T8b949e# Should have processed the text command, not the field command
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3text_responsesTb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3text_responsesTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff/textonly helloTa5d6ff"
Tff7b72def Td2a8fftest_field_command_with_string_argsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3botTb4b4b4)Tb4b4b4:
T8b949e"""FIELD_COMMANDS args sent as a single string should be wrapped in a list."""
Tf0883e@botTff7b72.Td2a8ffcommandTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffgreetTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffgreet_cmdTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3ctxTff7b72.Td2a8ffreplyTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffHi Tffd700{Te6edf3ctxTff7b72.Td2a8ffargsTb4b4b4[T79c0ff0Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmsg_hash_5Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffgreetTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4}Tb4b4b4}
Te6edf3sent Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffmock_sendTb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3titleTff7b72=Tff7b72NoneTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3sentTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflxmf_fieldsTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3original_send Tff7b72= Te6edf3botTff7b72.Td2a8ffsend
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3mock_send
Te6edf3botTff7b72.Td2a8ff_process_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3sentTb4b4b4) Tff7b72== T79c0ff1
Te6edf3_destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3_fields Tff7b72= Te6edf3sentTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Te6edf3msg Tff7b72== Ta5d6ff"Ta5d6ffHi AliceTa5d6ff"
Tff7b72def Td2a8fftest_msg_context_has_fields_and_request_idTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3botTb4b4b4)Tb4b4b4:
T8b949e"""The msg object passed to commands should expose fields and request_id."""
Te6edf3captured Tff7b72= Tb4b4b4{Tb4b4b4}
Tf0883e@botTff7b72.Td2a8ffcommandTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffcaptureTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffcapture_cmdTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3capturedTb4b4b4[Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ctxTff7b72.Td2a8fffields
Te6edf3capturedTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ctxTff7b72.Td2a8ffrequest_id
Te6edf3ctxTff7b72.Td2a8ffreplyTb4b4b4(Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmsg_hash_6Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{
Te6edf3FIELD_COMMANDSTb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffcaptureTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffreq-99Ta5d6ff"Tb4b4b4,
Tb4b4b4}
Tb4b4b4}
Te6edf3original_send Tff7b72= Te6edf3botTff7b72.Td2a8ffsend
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Tff7b72lambda Tff7b72*Te6edf3aTb4b4b4, Tff7b72*Tff7b72*Te6edf3kTb4b4b4: Tff7b72None
Te6edf3botTff7b72.Td2a8ff_process_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
Tff7b72assert Te6edf3capturedTb4b4b4[Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3mock_messageTff7b72.Td2a8fffields
Tff7b72assert Te6edf3capturedTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffreq-99Ta5d6ff"
Tff7b72def Td2a8fftest_text_command_does_not_add_field_resultsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3botTb4b4b4)Tb4b4b4:
T8b949e"""Normal text commands without FIELD_COMMANDS should not inject FIELD_RESULTS."""
Tf0883e@botTff7b72.Td2a8ffcommandTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffplainTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffplain_cmdTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3ctxTff7b72.Td2a8ffreplyTb4b4b4(Ta5d6ff"Ta5d6ffplain replyTa5d6ff"Tb4b4b4)
Te6edf3mock_message Tff7b72= Te6edf3MockTb4b4b4(Tb4b4b4)
Te6edf3mock_messageTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff/plainTa5d6ff"
Te6edf3mock_messageTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmsg_hash_7Ta5d6ff"
Te6edf3mock_messageTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3sent Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffmock_sendTb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3titleTff7b72=Tff7b72NoneTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3sentTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3destTb4b4b4, Te6edf3msgTb4b4b4, Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflxmf_fieldsTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3original_send Tff7b72= Te6edf3botTff7b72.Td2a8ffsend
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3mock_send
Te6edf3botTff7b72.Td2a8ff_process_messageTb4b4b4(Te6edf3mock_messageTb4b4b4, Ta5d6ff"Ta5d6ffsender_hashTa5d6ff"Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3sentTb4b4b4) Tff7b72== T79c0ff1
Te6edf3_destTb4b4b4, Te6edf3_msgTb4b4b4, Te6edf3lxmf_fields Tff7b72= Te6edf3sentTb4b4b4[T79c0ff0Tb4b4b4]
T8b949e# lxmf_fields should be None because there's no request_id
Tff7b72assert Te6edf3lxmf_fields Tff7b72is Tff7b72None
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────